package com.xiaoshangkou.hellopra.controller.backstage;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xiaoshangkou.hellopra.bean.RoleWithStatus;
import com.xiaoshangkou.hellopra.pojo.Admin;
import com.xiaoshangkou.hellopra.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

@Controller
@RequestMapping("/backstage/admin")
public class AdminController {

    @Autowired
    private AdminService adminService;

    /**
     * 用途：进入管理员页面时分页查询所有管理员
     * @RequestParam :设置默认值
     * page:当前页的页码（current）
     * size:每页显示的条数（size）
     */
    @RequestMapping("/all")
    public ModelAndView all(@RequestParam(defaultValue = "1") int page,
                            @RequestParam(defaultValue = "6") int size){
        ModelAndView modelAndView=new ModelAndView();
        Page<Admin> adminPage = adminService.findPage(page, size);
        modelAndView.addObject("adminPage",adminPage);
        modelAndView.setViewName("/backstage/admin_all");//请求转发到admin_all页面
        return modelAndView;
    }

    /**
     * 用途：添加新的管理员
     * admin :前端传来的管理员对象
     * 待更新：后期前端页面通过json数据实现局部更新
     */
    @RequestMapping("/add")
    @ResponseBody//不会跳转页面,返回字符串（json数据）
    public String add(Admin admin){
        adminService.add(admin);
        return "添加成功";
    }

    /**
     * 用途:开启/禁用管理员
     * aid:管理员的aid
     */
    @RequestMapping("/updateStatus")
    public String updateStatus(Integer aid){
        adminService.updateStatus(aid);
        return "redirect:/backstage/admin/all";
    }

    /**
     *用途：在修改管理员之前，先将原来的数据返回到前端
     *aid:管理员的aid
     */
    @RequestMapping("/edit")
    @ResponseBody//不会跳转页面,返回字符串（json数据）
    public Admin edit(Integer aid){
        return adminService.findById(aid);
    }

    /**
     * 用途：修改管理员
     * admin :前端传来的管理员对象
     * 待更新：后期前端页面通过json数据实现局部更新
     */
    @RequestMapping("/update")
    @ResponseBody//不会跳转页面,返回字符串（json数据）dcd
    public String update(Admin admin){
        adminService.update(admin);
        return "修改成功";
    }


    /**
     * 用途:管理员点击分配角色，跳转到分配页显示所有角色
     * 用户拥有的角色，默认打上勾
     * @param aid 管理员aid
     * aid传入admin_role是为了分配完角色后，提交到后端，后端知道是谁
     */
    @RequestMapping("/findRole")
    public ModelAndView findRole(Integer aid){
        ModelAndView modelAndView=new ModelAndView();
        List<RoleWithStatus> roles=adminService.findRole(aid);
        modelAndView.addObject("roles",roles);
        modelAndView.addObject("aid",aid);
        modelAndView.setViewName("/backstage/admin_role");
        return modelAndView;

    }

    /**
     * 用途：管理员给用户重新分配角色
     * @param ids 管理员添加的角色
     * @param aid 需要分配角色的管理员
     * @return
     */
    @RequestMapping("/updateRole")
    public String updateRole(Integer[] ids,Integer aid){
        adminService.updateRole(ids,aid);
        return "redirect:/backstage/admin/all";
    }

    /**
     * 用途：管理员点击详情按钮
     * 可以跳转查看相应管理员的详情页面
     * 内容:管理员名称 管理员角色 管理员权限
     * @param aid 管理员aid
     * @return
     */
    @RequestMapping("/desc")
    public ModelAndView desc(Integer aid){
        ModelAndView modelAndView=new ModelAndView();
        Admin admin = adminService.findDesc(aid);//查询数据
        modelAndView.addObject("admin",admin);
        modelAndView.setViewName("/backstage/admin_desc");
        return modelAndView;

    }



}
